redis的其他功能
慢查询
生命周期
两点说明
- 慢查询发生在第3阶段
- 客户端超时不一定慢查询,但慢查询是客户端超时的一个可能因素
两个配置
slowlog-max-len
slowlog-log-slower-than
如何配置
慢查询命令
- slowlog get [n] : 获取慢查询队列
- slowlog len: 获取慢查询队列长度
- slowlog reset: 清空慢查询队列
运维经验
pipeline:流水线
什么是流水线
- 1次网络命令通信模型
- 批量网络命令通信模型
使用建议
- 注意每次pipeline携带数据量
- pipeline每次只能作用在一个redis节点上
- M操作与pipeline区别
发布订阅
角色
- 发布者
- 订阅者
- 频道
模型
API
- publish channel message
- subscribe [channel] 一个或者多个
- unsubscribe [channel] 一个或者多个
练习
1 | 127.0.0.1:6382> publish weibomovie "hello world" |
另外一个cli
1 | 127.0.0.1:6382> SUBSCRIBE weibomovie |
发布订阅与消息队列
Bitmap
位图
API
命令 | 说明 | 时间复杂度 |
---|---|---|
setbit key offset value | 给位图指定索引设置值 | O(1) |
getbit key offset | 获取位图指定索引的值 | O(1) |
bitcount key start end | 获取位图指定范围(start 到end,单位为字节,如果不指定就获取全部)位值为1的个数 | O(1) |
bitop op destkey key [key…] | 做多个bitmap的and,or,not,xor操作并将结果保存在destkey中 | O(1) |
bitpos key targetBit [start][end | 计算位图指定范围(start到end,单位为字节,如果不指定就是获取全部)第一个偏移量对应的值等于targetBit的位置 | O(1) |
练习
1 | 127.0.0.1:6382> set hello big |
独立用户统计
重要理解使用位图去记录用户uid,其实就是记录索引值,比如userid=100代表位图下标100的值为1
使用经验
- type=string,最大512MB
- 注意setbit时的偏移量,可能有较大耗时
- 位图不是绝对好.
https://blog.csdn.net/u011489043/article/details/78990162
https://my.oschina.net/mengyuankan/blog/1932425
HyperLogLog
新的数据结构
API
命令 | 说明 |
---|---|
pfaddd key element [element…] | 向hyperloglog添加元素 |
pfcount key [key…] | 计算hyperloglog的独立总数 |
pfmerge destkey sourceKey [sourcekey…] | 合并多个hyperloglog |
练习
1 | 127.0.0.1:6382> pfadd puser1 "u1" "u2" "u3" |
内存消耗
使用经验
- 是否能容忍错误(错误率:0.81%)
- 是否需要单条数据(没有办法取出)
GEO
GEO是什么

5个城市经纬度
API
命令 | 说明 |
---|---|
geoadd key longitude latitude member [longitude latitude member …] | 增加地理位置信息 |
geopos key member[member… | 获取地理位置信息 |
geodist key member1 member2[unit] | 获取两个地理位置的距离,unit:m,km,mi,ft |
georadius | 获取指定位置范围内的地理位置信息集合 |
练习
1 | 127.0.0.1:6382> geoadd beijing 116.28 39.55 |
相关说明
- since 3.2+
- type geoKey = zset
- 没有删除API:zrem key member